<?php
// +----------------------------------------------------------------------
// | sfadmin - Suifeng Administration
// +----------------------------------------------------------------------
// | Copyright (c) 2017-2020 http://suifeng.tech All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: suifeng <1787585212@qq.com>
// +----------------------------------------------------------------------

namespace app\common\behavior;

use think\App;
use think\Config;
use think\Loader;

final class Application
{
    public function appInit()
    {
        require_once APP_PATH . 'common/constants.php';
        require_once APP_PATH . 'common/annotations.php';
        require_once APP_PATH . 'common/functions.php';

        Loader::addNamespace('suifeng', APP_PATH . 'common/library/');

        // 默认配置
        defined('DEFAULT_MODULE') && config('default_module', DEFAULT_MODULE);
        defined('DEFAULT_CONTROLLER') && config('default_controller', DEFAULT_CONTROLLER);
        defined('DEFAULT_ACTION') && config('default_action', DEFAULT_ACTION);

        // 调试模式
        defined('APP_DEBUG') or define('APP_DEBUG', App::$debug);

        // CGI模式？
        define('IS_CGI', (false !== strpos(PHP_SAPI, 'cgi')) ? 1 : 0);

        // 当前文件名
        if (!defined('_PHP_FILE_')) {
            if (IS_CGI) {
                //CGI/FASTCGI模式下
                $_temp = explode('.php', $_SERVER['PHP_SELF']);
                define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'], '', $_temp[0] . '.php'), '/'));
            } else {
                define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'], '/'));
            }
        }

        // ROOT路径
        if (!defined('__ROOT__')) {
            $_root = rtrim(dirname(_PHP_FILE_), '/');
            define('__ROOT__', (('/' == $_root || '\\' == $_root) ? '' : $_root));
        }

        // STATIC路径
        if (!defined('__STATIC__')) {
            define('__STATIC__',  __ROOT__ . '/static');
        }

        // 视图内容替换
        config('view_replace_str', config('view_replace_str') + [
            '__ROOT__'    => __ROOT__,
            '__STATIC__'  => __STATIC__,
        ]);

//         // SESSION与COOKIE设置不同的前缀，避免冲突
//         if (in_array(APP_NAME, ['admin', 'install'])) {
//             config('session.prefix', strtolower(ENV_PREFIX . APP_NAME . '_'));
//             config('cookie.prefix', strtolower(ENV_PREFIX . APP_NAME . '_'));
//         }
    }

    public function moduleInit()
    {
        // 检查系统是否有安装？
        if (request()->module() != 'install') {
            if (!is_file(CONF_PATH . 'config' . CONF_EXT) && APP_NAME != 'install') {
                header("Location: " . url('install/index/index'));
                exit();
            }
        }


        // --------------------------------------------------------------------
        // 下面是从数据库加载配置，只有非install才应该执行。
        // --------------------------------------------------------------------

        if (request()->module() == 'install') {
            return;
        }

        // 模块配置
        $db_config_data = cache('db_config_data');
        if (!$db_config_data || APP_DEBUG) {
            $db_config_data = model('admin/config')->get_cached_array();

            $db_config_data['installed_modules'] = model('admin/module')->get_cached_list();
            foreach ($db_config_data['installed_modules'] as $module) {
                $db_config_data[strtolower($module['name'] . '_module')] = $module['config'];
            }

            cache('db_config_data', $db_config_data, 3600);
        }
        config($db_config_data);



//         // --------------------------------------------------------------------
//         // 创建模块实例。
//         // 模块类在模块根目录下的module.php文件内定义。
//         // --------------------------------------------------------------------

//         $installed_modules = config('installed_modules');
//         if ($installed_modules) {
//             foreach (array_keys($installed_modules) as $module) {
//                 //ModuleHelper::regiserHooks($module);

//                 /*
//                  $module_file = realpath(APP_PATH . $module['name'] . '/module.php');
//                  if ($module_file) {
//                  require_once $module_file;
//                  $class_name = '\\' . \think\App::$namespace . '\\' . $module['name'] . '\\Module';
//                  $module_instance = new $class_name();
//                  } else {
//                  $module_instance = null;
//                  }

//                  $installed_modules[$module['name']]['instance'] = $module_instance;

//                  // 检查是否有@Hook定义
//                  if ($module_instance) {
//                  $ref_class = new \ReflectionAnnotatedClass($module_instance);
//                  foreach ($ref_class->getMethods() as $ref_method) {
//                  if ($ref_method->hasAnnotation('Hook')) {
//                  $hook_name = $ref_method->getAnnotation('Hook')->value;
//                  if (empty($hook_name)) {
//                  $hook_name = $ref_method->getName();
//                  }

//                  \think\Hook::add($hook_name, array($module_instance, $ref_method->getName()));
//                  }
//                  }
//                  }
//                  */
//             }

//             config('installed_modules', $installed_modules);
//         }


//         // --------------------------------------------------------------------
//         //  针对已安装的模块和插件，加载它的的标签库和扩展。
//         // --------------------------------------------------------------------

//         // 解析标签库，配置里面是字符串，转换成数组
//         $taglib_pre_load = explode(',', config('template.taglib_pre_load'));

//         $installed_modules = config('installed_modules');
//         if ($installed_modules) {
//             foreach (array_keys($installed_modules) as $module_name) {
//                 // 模块标签库
//                 $tag_path = APP_PATH . $module_name . '/taglib/' . $module_name . '.php';
//                 if (is_file($tag_path)) {
//                     $taglib_pre_load[] = $module_name . '\\taglib\\' . $module_name;
//                 }

//                 // 模块行为扩展
//                 $bhv_path = APP_PATH . $module_name . '/behavior/' . $module_name . 'Behavior.php';
//                 if (is_file($bhv_path)) {
//                     \think\Hook::add('sf_behavior', $module_name . '\\behavior\\' . $module_name);
//                 }
//             }
//         }

//         //      $installed_addons = config('installed_addons');
//         //      if ($installed_addons) {
//         //          foreach ($installed_addons as $addon_name) {
//         //              // 插件标签库
//         //              $tag_path = config('addon_path') . lcfirst($addon_name) . '/taglib/' . $addon_name . 'Addon.php';
//         //              if (is_file($tag_path)) {
//         //                  $taglib_pre_load[] = '\\addon\\' . lcfirst($addon_name) . '\\taglib\\' . $addon_name . 'Addon';
//         //              }

//         //              // 插件行为扩展
//         //              $bhv_path = config('addon_path') . lcfirst($addon_name) . '/behavior/' . $addon_name . 'Addon.php';
//         //              if (is_file($bhv_path)) {
//         //                  \think\Hook::add('sf_behavior', '\\addon\\' . lcfirst($_addon['name']) . '\\behavior\\' . $addon_name);
//         //              }
//         //          }
//         //      }

//         // 格式化加载标签库
//         config('template.taglib_pre_load', implode(',', $taglib_pre_load));
    }

    public function actionBegin(&$callback)
    {
        // $callback[0] = controller instance
        // $callback[1] = action name
    }
}

